Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Do Whileループで配列を処理する

Do Whileループで配列を処理する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba do while 配列」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBA(Visual Basic for Applications)で配列を処理する際に、Do~Loop文の一種である、Do While文を使うコードについて探していた方による検索です。

既にデータの格納されている配列に何らかの処理を行う場合、Do~Loop文よりも、For~Next文のほうがシンプルに書けるケースが多いはずですが、プログラミング学習の一環として、あえてDo While文を書いてみるというのは、アリかもしれません。

[スポンサードリンク]

Do Whileループで配列を処理するサンプルマクロ

以下のマクロを実行すると、配列変数・arrに格納された文字列「イ」「ロ」「ハ」が、メッセージボックスに順番に表示されます。

Sub Do_Loopで配列を処理する()

 Dim arr As Variant
 Dim i As Long

 arr = Split("イ;ロ;ハ", ";")

 i = LBound(arr)
 Do While i <= UBound(arr)
  MsgBox arr(i)
  i = i + 1
 Loop

End Sub

配列のインデックス・添字の初期値を、LBound関数を使って変数・iに設定しておいてから、
 i = LBound(arr)

変数・iがUBonde関数で返される値以下の間、Do~Loopを回しています。
 Do While i <= UBound(arr)

Do~Loop文に慣れていない方の場合、
  i = i + 1
という変数をインクリメントする処理を忘れがちです。

For~Nextループで配列を処理するサンプルマクロ

同じことをFor~Nextループを使って書くと以下のとおりです。

Sub For_Nextで配列を処理する()

 Dim arr As Variant
 Dim i As Long

 arr = Split("イ;ロ;ハ", ";")

 For i = LBound(arr) To UBound(arr)
  MsgBox arr(i)
 Next i

End Sub

Do Whileループで必要だった、
  i = LBound(arr)
  Do While i <= UBound(arr)
   i = i + 1
という3行が、For~Nextループでは、
  For i = LBound(arr) To UBound(arr)
の1行に、シンプルにまとめられているイメージです。

ループの条件を数値で表現できるならDo~LoopよりFor~Next

シンプルになっているので、Do Whileループよりも、For~Nextバグを生みにくいともいえます。

Do~Loop文に慣れていて、For~Next文に慣れていないプログラミング初心者の場合、必要のない、
  i = i + 1
をうっかり書いてしまいがちです。

今回の記事でご紹介した配列に限らず、ループを回す前に何回ループを回せばいいのかがわかっているような場合、ループを回す条件を数値で表現できるのならば、Do~Loop文よりもFor~Next文のほうが、シンプルにバグを生みにくく書けるはずです。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Do Whileループで配列を処理する

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.